Шаг 14 - Список все адаптеров.

Загрузить проект

Так как адаптеров может быть много, то надо как то научиться их перебирать. С адаптерами работает интерфейс NDIS, это самый нижний уровень. Дальше драйвер сетевой карты. А вот над этим интерфейсом как раз и находиться NetBios вот с помощью него мы попробуем получить этот список. Ниже я приведу часть схемы которую я постепенно делаю связанную с данным вопросом. Как только схема будет готова Вы увидите ее на сейте, а пока вот кусок.

14_1.gif (4232 b)

Итак, среди команд NetBios есть одна связанная с данным вопросом правда как написано не стандартная NCBENUM. Microsoft как всегда что то там рассказывает о Windows NT, а нам все равно правда?

14_2.gif (3232 b)

Получение информации о адаптере взято из Шаг 1 - Получение MAC адреса сетевой карты.

#include "stdafx.h"
#include "windows.h"
#include "nb30.h"
#include "iostream.h"
#include "mbstring.h"

#pragma comment(lib,"Netapi32.lib")


typedef struct _ASTAT_
{    
    ADAPTER_STATUS adapt;
    NAME_BUFFER    NameBuff [30];
}Adapter;

void main()
{
NCB	ncb;
UCHAR uRetCode; 
LANA_ENUM la;
memset( &ncb,0,sizeof(ncb)); 
ncb.ncb_command = NCBENUM;
ncb.ncb_buffer=(unsigned char *) &la;
ncb.ncb_length = sizeof(LANA_ENUM );
uRetCode = Netbios((NCB*) &ncb );
if ( uRetCode == NRC_GOODRET )  
{
	cout << "Ok" << endl;
	for (int x=0;x<la.length;x++)
	{
		cout << "Adapter " << x << " - INFO - " <<  endl;
		memset( &ncb, 0, sizeof(ncb) ); 
		// Это из первого шага
		ncb.ncb_command = NCBASTAT;
		ncb.ncb_lana_num = la.lana[x];		// это наш номер
		_mbscpy( ncb.ncb_callname,(UCHAR*)"*               ");
		Adapter a1;
		ncb.ncb_buffer = (unsigned char *) &a1; 
		ncb.ncb_length = sizeof(a1);
		uRetCode = Netbios((NCB*) &ncb );
		if ( uRetCode == NRC_GOODRET )   
		{
			 printf( "The Ethernet Number is: %02x%02x%02x%02x%02x%02x\n",
                a1.adapt.adapter_address[0],
                a1.adapt.adapter_address[1],
                a1.adapt.adapter_address[2],
                a1.adapt.adapter_address[3],
                a1.adapt.adapter_address[4],
                a1.adapt.adapter_address[5] ); 
		} 
		else cout << "error read" << endl;
		// конец кода первого шага
	}
}
else cout << uRetCode;
}

Все как всегда разве структура новая. Запускаем смотрим.

14_3.gif (4862 b)

Номеров три. И адаптеров три, только два номера похожи. Последний номер это контролер удаленного доступа. А вот один из похожих это сетевая карта и ИК порт который Plug&Play в самом хорошем понимании не спрашивая него и не кого устанавливается при первом удобном случае. Вообще работает все это. Кстати Netapi32 использует NetBios.dll сама по себе нечего не делая.

14_4.gif (2225 b)

Hosted by uCoz